23

» WarCraft 3 / Не могу разобраться

Похожие вопросы:

ответ
Здесь рассказано всё про импорт, и даже карта есть с примером.
ответ
Steal nerves:
Filius Dei, так что-то не так делаешь. Функцию нельзя внутри функции копировать, функцию закинь повыше.
знаешь такую находил много раз. атака сзади атака в спину и др. ищи на форуме "заклинание на заказ", там в первых наработках есть похожее. Углы сложно подсчитать?
подробности
Я тебе скинул пример, на событие юнит атакован. Но ты должен знать что "юнит атакован" - событие, при котором юнит начинает замахиваться, а потом пускает снаряды (у милишников без этого), и потом происходит урон. Надо делать систему урона от события "юнит получает урон". Так как при событии "юнит атакован" можно промахнуться.
Когда при событии "получает урон" наносишь дополнительный триггерный урон, смотри, чтобы зацикливания не было.
ответ
Рассчитал границы. Теперь нормально выбирается.
ответ
Steal nerves:
Что такое "Дебаг"
на экран выводят отладочные сообщение. Когда триггер срабатывает, ты об этом не знаешь. Ты не видишь этого, тк все действия внутри игры. А сработал ли триггер, мб вообще не работает (пример забыл включить триггер)? Поэтому выводят на экран. Или другая ситуация: почему то условие не работает, проверяем прокатило ли условие: тоже самое в блоке условия вставляют действие вывода сообщения игроку.
if b then //если условие b прокатило
 выводим сообщение "прокатило условие b"
else //иначе 
 выводим сообщение "условие b не прокатило" //будем знать что триггер хоть работает
endif
будем знать что условия прокатывает или нет. Мб у вас условие багованное, один раз на jass такое написал, обрывалось или не работало. Сообщение никакого не выводило.

Или допустим нужно знать какие числа или строки у вас, как считает, считает ли вообще? тоже выводишь на экран результат строки или число
где его взять
в триггере в действии в разделе "игра" можно сообщение выводить

так можешь еще проверять переменные вариковские. например, если не знаешь что за переменная. скажем какой юнит хранится под этой переменной как trigger unit. выводи имя юнита на экран, выведут название типа например "пехотинец", который вызвал каст (будешь знать что вызвал футман а не бугай. И значит trigger unit - кастер итд). про потоки это мой анализ, но как бы локалки делай как в статье про локи, это с опытом придет

23

» WarCraft 3 / Как отловить смерть героев с крестом воскрешения?

Похожие вопросы:

ответ
Реализовал через второй вариант:
Дальше пришла в голову другая идея. Думаю, можно сделать с помощью ремонта зданий Альянса: на месте смерти героя создаётся здание с моделью креста со здоровьем 1/100 ед., а союзные герои ремонтируя крест будут повышать её здоровье, получается некая иллюзия прогресс бара. И если спрятать способность ремонта с помощью функции HideAbilityButton( ) из мемхака, то будет ли она срабатывать при нажатии на ПКМ? Также, как отловить момент полного ремонта здания? С помощью таймера проверять процент здоровья каждые доли секунды?
раскрыть
scope HeroRevive initializer Initialization


    struct herorevive
        private                    unit           dyingUnit
        private                    unit           reincarnate
        private                    real           life

        private                    thistype       prev
        private                    thistype       next

        public   static  constant  trigger        trig    =  CreateTrigger( )
        public   static  constant  timer          period  =  CreateTimer( )


        private static method iterate takes nothing returns nothing
            local  thistype  this  =  thistype( 0 ).next

            loop
                exitwhen ( this == 0 )

                if ( GetWidgetLife( this.reincarnate ) > this.life ) then
                    set  this.life  =  GetWidgetLife( this.reincarnate )

                elseif ( GetWidgetLife( this.reincarnate ) >= GetUnitState( this.reincarnate, UNIT_STATE_MAX_LIFE ) ) then
                    call ReviveHero( this.dyingUnit, GetUnitX( this.dyingUnit ), GetUnitY( this.dyingUnit ), true )
                    call RemoveUnit( this.reincarnate )

                    set  this.reincarnate  =  null
                    set  this.life         =  0.0

                    set  this.prev.next    =  this.next
                    set  this.next.prev    =  this.prev

                    if ( thistype( 0 ).next == 0 ) then
                        call PauseTimer( thistype.period )
                    endif

                    call thistype.deallocate( this )

                elseif ( GetWidgetLife( this.reincarnate ) <= this.life ) then
                    set  this.life  =  1.0
                    call SetWidgetLife( this.reincarnate, this.life )
                endif

                set this = this.next

            endloop
        endmethod


        public static method actions takes nothing returns nothing
            local  thistype  this  =  thistype.allocate( )

            set  this.next         =  0
            set  this.prev         =  thistype( 0 ).prev
            set  this.next.prev    =  this
            set  this.prev.next    =  this

            set  this.dyingUnit    =  GetDyingUnit( )
            set  this.reincarnate  =  CreateUnit( GetOwningPlayer( this.dyingUnit ), 'h003', GetUnitX( this.dyingUnit ), GetUnitY( this.dyingUnit ), 0.0 )
            set  this.life         =  1.0

            call SetUnitPathing( this.reincarnate, false )
            call SetWidgetLife( this.reincarnate, this.life )

            if ( this.prev == 0 ) then
                call TimerStart( thistype.period, 0.10, true, function thistype.iterate )
            endif
        endmethod


        public static constant method conditions takes nothing returns boolean
            return IsUnitType( GetDyingUnit( ), UNIT_TYPE_HERO )
        endmethod


    endstruct


    public function Initialization takes nothing returns nothing
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 1 ), EVENT_PLAYER_UNIT_DEATH, null )
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 2 ), EVENT_PLAYER_UNIT_DEATH, null )
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 3 ), EVENT_PLAYER_UNIT_DEATH, null )
        call TriggerRegisterPlayerUnitEvent( herorevive.trig, Player( 4 ), EVENT_PLAYER_UNIT_DEATH, null )

        call TriggerAddCondition( herorevive.trig, Condition( function herorevive.conditions ) )
        call TriggerAddAction( herorevive.trig, function herorevive.actions )
    endfunction


endscope
Вот только если спрятать кнопку через HideAbilityButton( ), то способность ремонта зданий исчезает и не работает через ПКМ.

23

» WarCraft 3 / Помогите разобраться в триггерах карты

Похожие вопросы:

ответ
Да у тебя куча дыр, во-первых ты не запустил триггер 115 области lumber direction, и оно соответственно не реагирует на событие. Во-вторых перепроверь gold проверку условия на да или нет в той карте которую ты отправил стоит нет
А золото не движется потому что ты ожидание 0,5 сек поставил а область в милисекунде от изначальной то есть триггер не успевает запуститься
ответ
Возможно, что ты юзал продвинутый cJass или vJass не помню, кажется он не поддерживается кампанией. Это возможная причина. Кинь в лс

Проблема оказалась в пользовательских настройках шрифтов.
ответ
Нашел ошибку:
В функции SuicideUnits (в самом низу) должно находиться строго 10 значений. У меня 9. Если приписать еще 0, то все работает.

23

» WarCraft 3 / Реген

Похожие вопросы:

ответ
невозможно.
Только если обрабатывать всю информацию вручную.
Кинули лечилку - прибавить 40, повешали регенерацию хуска - проверить уровень способности, добавить. Постоянно проверять на ауры регена, полученные баффы и их уровень.
ответ
Steal nerves, там бонус регена идет от базового + от инты, если регена маны нет то и бонуса нет=) Процент от кол-ва маны дает только аура архимага.
ответ
EHP_Sequence:
Аура смерти влияет на реген относительно имеющегося регена, так что она не подходит.
EHP_Sequence:
Аура смерти действует не в процентах, а в фиксированных числах. А нужно в процентах.
Аура Смерти (Unholy Aura) ['AUau'] - даёт бонус к регенерации здоровья (чистым значением) и бонус к скорость передвижения юнита (в процентах).
Регенерация здоровья никак не зависит от того, какая и сколько регенерации у юнита. Она просто даёт +N (или минус, если трицательное) к его ежесекундному показателю. Это значение не усиливается и не ослабляется чем-либо (лишь складывается). При этом там есть параметр Процент повышения (Uau3), который превращает указанное число в множитель на текущее в данный момент максимальное здоровье юнита (у героев макс.ХП изменяется с течением игры, это имеется ввиду).
Про скорость думаю и так и всё понятно.
ответ
~8gabriel8:
Есть специальная тема xgm.guru/p/wc3/needspells
Там есть Каменный щит xgm.guru/p/wc3/needspells?postid=401948#comment1497
Нужно просто добавить ему несколько уровней и бонусы для защиты и регенерации здоровья, которые есть у способности Духовное пламя.
Почти в самом низу страницы 30 Каменный щит
ответ
Зачем делать сон аурами, которые не складываются, дак еще и их бафф не удаляется и юниты могут регенится по 2-4 сек свыше того момента как исчезла аура.
Создаем триггер с переодическим событием, скажем 0.25 сек или 0.5, и группу, в которой всем юнитам восстанавливаем % хп исходя из уровня баффа сна, если у юнита нет баффа сна, удаляем его из группы, и еще 1 триггер который срабатывает на каст сна, и заносит спящего в группу регенерации. Легко, просто, полностью кастомный реген который ни с чем не багует.

23

» WarCraft 3 / Фатальная ошибка, связанная с картой

Похожие вопросы:

ответ
проведя еще пару часов за тестами, в голову пришла мысль о фаталках из-за большого числа юнитов на мелководье
остановился на том, что ошибка вылетела из-за случайных точек спауна по квадрату на мелко-глубкоководной местности. сделал спаун в отдельных мини областях - ошибка исчезла

23

» WarCraft 3 / Не видит карту

Похожие вопросы:

ответ
Вообщем перенастроил Jass New Gen Pack карта как то по другому сохранилась с проверками и всё наладилось)
ответ
~8gabriel8:
Убери такие пути и проверьте опять.
ответ
Карты - C:\Users\%username%\Documents\Warcraft III\Maps
Кампании - C:\Users\%username%\Documents\Warcraft III\Campaigns
Папку для кампаний возможно потребуется создать самому.
ответ
BartSi, очень странно.
Нашёл проблему. В редакторе ландшафта нужно выбрать Camera Palette (там где юниты, декорации и прочее) выбрать первую строчку (камера без имени) и удалить. Тогда проблема решится. Сбросил триггеры и удалил камеру.
Ошибка из-за того, что у камеры почему-то пустое имя. Из-за этого её переменная оканчивается на _, что нельзя в JASS.

BartSi, каким конвертером 1.31 -> 1.26 пользовался?

Hodor, твой конвертер случайно не шаманит с камерами?

23

» WarCraft 3 / Не вылезает

Похожие вопросы:

ответ
Вопрос закрыт.
ответ
Эта проблема вызывается физическими повреждениями железа, как я нагуглил
Детали так сходу не скажу, но SFile.cpp - кусок storm.dll, вроде как обработчик строк
ответ
~8gabriel8:
Ну тогда это через способность Вырвать дерево.
Вот наработка:
Но там тоже проблема с отображением типа атаки на герое.
Не понимаю, чем для данной задачи не устраивает Перевоплощение в такого же юнита с другой атакой.
По идее может помочь мемхак, но он только для версии игры 1.26а.

23

» WarCraft 3 / Космодесантник

Похожие вопросы:

ответ
Artyom18, может за тебя ещё карту сделать?
За заказами тебе в эту тему:
ответ
даббл пост
ответ
IIIНекромантIII:
8gabriel8:
Сделал другое, но спасибо, да был вариант с кличем, но по-моему слишком банально.
Вот что сделал:
Скорость боя повышается, т.к дредноут с огнемётом. Выглядит круто.
ответ
Было создано 22 366 679 экземпляров класса CUnitListNode, которые заняли 255.9 МБ памяти.
При очередной попытке выделения, игра упала.
Виной всему утечки памяти: за 21 минуту набралось 80 тысяч групп и 20 тысяч точек.
Также, из-за выполнения большого количества кода, сильно лагает.
На стадии выбора героя (первые две минуты), выполняется 550 000 операций в секунду, а далее — 1 200 000.
Для сравнения: лимит потока — 300 000 операций.
Хорошо, что ты приложил карту, так как в логе маловато информации.

23

» WarCraft 3 / Preload

Похожие вопросы:

ответ
Только ретурн багом с помощью хака на память, но там вроде и так реализован пример создания тхт файла...
Вопрос только зачем?
ответ
нужно так Preload (строка), Preload( строка) и так 100500 раз
ответ
Кривоватая подгрузка, удалять не обязательно. Лучше юзать preload без этаких костылей, темболее в JASS есть механизмы автоматического создания pld скриптов.
ответ
Я тут не давно тему эту ковырял, для сохранения героя вам поможет
А то что показываете вы, сохраняет введённые в чат сообщения, никак не героя
ответ
В общем во время сохранения файла я попробую продублирую весь код, во время загрузки файла я сначало выполню файл в котором чисто Preload("Код") чтобы его занести на компьютер клиента, а только потом начну выполнять Preload("\")\n <Код>\n//"). Надеюсь сработает. А про то что никто в этом не видит смысла, так часто говорят.
Получилось так что я допустил туже ошибку...
Может есть какая-нибудь нативка/функция которая будет синхронизировать информацию? Если нет, то скорее всего я зря пытаюсь.
Есть какая-нибудь статья про TriggerSyncReady и Start? xgm.guru/p/wc3/159609, тут обсуждается похожая ситуация.
В общем дождался друга чтоб протестить TriggerSyncStart и Ready, в итоге я поставил их перед функцией Preloader(сначало Start потом Ready) и всё десинк пропал.

23

» WarCraft 3 / Получить кликнувшего игрока

Похожие вопросы:

ответ
XGM Bot:
Похожие вопросы:

ответ
Перебором каждого игрока и проверкой, что у него щас выделен этот юнит
Или использовать EVENT_PLAYER_UNIT_SELECTED , тогда будет TriggerPlayer


23

» WarCraft 3 / Получить кликнувшего игрока

Похожие вопросы:

ответ
XGM Bot:
Похожие вопросы:

ответ
Перебором каждого игрока и проверкой, что у него щас выделен этот юнит
Или использовать EVENT_PLAYER_UNIT_SELECTED , тогда будет TriggerPlayer


23

» WarCraft 3 / Глючит карта

Похожие вопросы:

ответ
Filius Dei, создаешь способность, которой ты будешь ставить метки. Даешь ей бафф без каких-либо эффектов.
Потом при касте своей способности которая меняет владельца просто проверяешь у цели наличие твоего баффа.
ответ
Death-time это время разложения и анимы смерти, после его истечения юнита уже нету на карте, но труп может быть и хендл пока висит.
Все неразлагающиеся (вспомни летунов) умирают сразу не оставляя трупов и удаляются после death time.
Так же суммоны, всякие варды. Можно добавить баф призыва волков, тогда юниты удалятся сразу после смерти.
ответ
Вот, правильно импортировал. Сама модель крайне странная, потому что War 3 ME не хочет ее открывать (увидел, что собой представляет только в War 3 Viewer'e).
ответ
Опытным путем, спустя второй день нервов, нашел выход. Я снова импортировал текст в карту, и она перестала крашиться. Почему отсутствие текста влияло на неё, не знаю.

23

» WarCraft 3 / Расстояние до цели

Похожие вопросы:

ответ
Ну ты нашёл. Возрадуйся. CAMERA_FIELD_FIELD_OF_VIEW это вроде.
ответ
Extremator, уже предлагали
darkowlom, всеравно нужна бд на все возможные эффекты
короче все возможные ответы даны
тему закрываю
если кто то придумает чтото новое пишите автору в пм

23

» WarCraft 3 / Урон по линии

Похожие вопросы:

ответ
Идеальный вариант чтобы игрок сам мог решать, нужно ли ему это. Сделай, если будет смотреться неплохо. И каким то образом запилить возможность выключения этой фичи.

23

» WarCraft 3 / Что делать?

Похожие вопросы:

ответ
XGM Bot:
Похожие вопросы:

ответ
  1. Если юзал JNGP, залезь в папку backups - мб там остались работоспособные недавние копии
  2. Попробуй MPQ Editor, мб удастся что-то вытащить, чтобы не совсем с нуля начинать, если карта таки сломалась
  3. Вообще если карта долго грузится, это не факт, что она не загрузится вообще (хотя, судя по описанию ситуации, вряд ли это твой случай)
ответ
nvc123, да, и я это уже понял
ответ
Наверно заставляет героя (whichHero) прокачать скилл (abilcode) по его рав-коду (например 'A000').
Не?
ответ
да я решыл проблему я просто перегрузил комп
Я понел в чом проблема я поставил в vjass 2 галки нижние включил из надо отключать и тогды проблем не будет

ответ
Закинуть Fonts в папку с игрой - должно помочь (требует включенного параметра на подгрузку локальных файлов).
ответ
Я бы предложил для начала попробовать себя в программировании, прежде чем использовать Jass. А так можно использовать GUI и переводить на Jass. На форуме даже была статья по оптимизации при переводе GUI –> Jass (да и просто оптимизации Jass и углубление в скриптование Warcraft 3). Лично мне это быстро помогло перейти на Jass за несколько дней.
Возможно, главным вопросом будет по типу: "А вы вообще понимаете, что вы делаете на том же GUI?"

23

» WarCraft 3 / Поднятие юнита в воздух.

Похожие вопросы:

ответ
Вариант по индексу не хотелось бы, ввиду использования для разных моделей.
Придётся. Walk не играется триггерно при нормальных условиях.
Впрочем можно заставить проигрывать walk поставив юниту скорость движения 0 в редакторе объектов.

23

» WarCraft 3 / Воскрешение

Похожие вопросы:

ответ
~8gabriel8:
Очень просто)

События:
Юнит Умирает
Условия:
(Diying unit) равно Герой
Owner of (Diying unit) не равно Нейтрально-враждебный
Действия:
Wait 10 секунд
Воскресить (Diying unit)

В этом триггере (Diying unit) не будет меняться с каждой новой смертью, она как локалка.
ответ
Всё просто, только зачем такие сложности?
ответ
Cardinal, за такое именование переменных нужно по рукам бить.
то бежит к третьему триггеру которій и воскрешает
Не плодите триггеров, все нужные действия можно и в цикле сделать.
У вас переменная T отвечает за состояние героя, зачем проверять жив юнит или нет?
T<0 Жив
T==0 Нужно воскресить прям сейчас
T>0 Ждёт воскрешения
Cardinal:
T[номер героя] болше или равна 1
больше или равна 0 => T[] = T[] -1
ответ
Steal nerves:
смотри в кампании Рексара, в разделе триггеры, как там сделано.
По-моему ничего сложного нет:
  1. ловим , что герой около камня. Попробуй расположить около камней ректы, и с помощью события ловить их. Конечно можно еще ловить таймером, проверяя каждую сек дистанцию между камнями и героем, или событием радиуса между ними. При заходе в эту область проигрываем анимацию свечения одного камня (узнай в модельке что за анимация), и выключаем свечение другого камня. Запоминаем для этого героя место спавна. Не знаю, если мульти делать, можно ли через getlocalplayer анимацию задавать. Если можно, то модель камня проще переделать, там разные цвета
  2. При смерти героя таймером ждем, и спавним у этого места, проигрывая анимацию воскрешения у камня.
Поищи на форуме
xgm.guru/p/wc3/bpe <= посмотри нету ли тут
тебе скинуть карты кампании с разбором? или сам? щас смотрю, они там действительно через ректы

23

» WarCraft 3 / Reforged на LUA

Похожие вопросы:

ответ
Но как переписать код на луа как можно быстрее?
Можно достать из карты war3map.j и сконвертировать в lua. После доработки напильником вполне работоспособно))

23

» WarCraft 3 / Требование расы

Похожие вопросы:

ответ
Действие "Enforce victory/defeat comnditions" следует включить после того, как выберут расу, чтобы не выскакивало в начале.

23

» WarCraft 3 / Волны атак

Похожие вопросы:

ответ
1.интерфейс/монстры-возвращение охраны ставь на 10000
2.удаляешь игрока 12 чтобы в игре он незначился а монстров создаёшь для него уже в игре у них недолжна быть прикреплена точка ожидания
3.их надо заставлять переодически двигаться либо всех разом в пределе 5 сек,либо переберая поочерёдно в 0,1сек а если их очень много то 0,05сек
4.то что ты описываешь бывает при очень большом количестве мобов,вариант сделать норм систему где мобы не наваливались волнами на предыдущих адержались определённого кол на карте
ответ
Мб "Дистанция получения приказа" в редакторе объектов поставить на 99999, и дать игроку-компу чьи мобы видимость на всю карту.
ответ
~8gabriel8:
Почитай про утечки точек, как их создавать и удалять. Не знаю, как в твоём новом патче, но в 1.26 приказ отдаётся максимум 12 юнитам, у тебя может быть также, потому лучше отдавать приказ сразу после создания.
Предлагаю улучшить так:
  • Создать переменные для двух точек;
  • В триггере инициализации указать точкам значение центра областей 016 и 025;
  • Сделать периодический триггер с условием, что Король Мёртвых жив, а в действиях создание групп юнитов в одной точке, а сразу после создания приказ (Last Created Group) Перейти, нападая на противников, в другую точку;
  • По идее ещё бы отключить триггер за ненадобностью после смерти Короля Мёртвых, раз уж много таких триггеров, но всё равно изменение нагрузки будет незаметным, поэтому можно не отключать.
P. S. Утечка точки весит 0.361 кб, даже если не удалять утечки в этом триггере, то за 30 минут это будет 0.361х4х30=43.32 кб, что вполне приемлимо.
ответ
используй хэш таблицу/параллельные массивы/структуры
для каждой волны записывай равкоды юнитов и количество юнитов
при запуске волны считывай равкоды и количество и создавай юнитов на основе этих данных
когда все созданные юниты умерли запускай таймер на 30 секунд по истечению которого начинается следующая волна
разобраться с хэш таблицей/параллельными массивами/структурами и таймерами помогут статьи

23

» WarCraft 3 / Описание предметов

Похожие вопросы:

ответ
Для большого описания нужно заменять кириллические буквы на аналогичные английские. о на o и т.д.
Кириллица в варике занимает места побольше.
ответ
|n - переход на новую строку
Ctrl + Enter - тоже переход
ответ
теги форматирования юзай, |n - с новой строки к примеру, подробнее смотри описание абилок и оттуда копипасти нужные теги.

23

» WarCraft 3 / Color

Похожие вопросы:

ответ
Аргументы функций не обязательно обнулять
Steal nerves:
нет, не нужно. это аргументы (это тоже локалки), говорят, что обнуляется само по завершению функции. А то что объявляем через local надо обнулять. строки вообще не обязательно обнулять (хоть не шарю в этом программировании, но обнулять не нужно). Уже многие пишут не надо строки обнулять, и аргументы. Можешь поискать.
Нужно обнулять только те локалки, которые указывают на игровой обьект.
ответ
Это раздел для вопросов по WC3, а не Photoshop. Ищите в Интернете "Как сделать альфа-канал в Photoshop".
Также есть статья для создания текстуры с тимколором.
ответ
~8gabriel8:
Есть в категории Игрок действие на смену цвета. Делаешь события, что игрок вводит в чат -color для всех игроков, куда добавляешь это действие.

23

» Администрация XGM / Ошибка

Похожие вопросы:

ответ
Это не баг, а фича для репостнутых ресурсов
ответ
ну наверное денег мало, нужно больше денег! Запихивай купюры себе в CD/DVD привод, затем поставь драйвер и закачай их нам на сайт.
ответ
Исправлено
ответ
Исправлено
ответ
Ошиблись категорией вопрос, выбрать нужно Warcraft